package com.bawei.wyg.networkmodel.interceptor;

import com.bawei.wyg.networkmodel.utils.Md5Utils;
import com.blankj.utilcode.util.LogUtils;


import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.util.Iterator;

import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okio.Buffer;
/**
 * 在进入时自动配置，如果没有时每次请求时都要手动配置
 * */
public class Signinterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        //取出原始request
        Request oldRequest = chain.request();
        //配置一个新的request
        Request.Builder builder = new Request.Builder();
        //获取url
        builder.url(oldRequest.url());
        builder.headers(oldRequest.headers());
        //取出旧的requestbody
        RequestBody oldBody = oldRequest.body();

        //获取body中的值
        //Buffer缓存为解决内存浪费问题，可变，当修改或者添加新的串的时候，不会定义新的而是在原有的字符串上更改
        Buffer buffer = new Buffer();
        //把body写到buffer中
        oldBody.writeTo(buffer);
        //定义一个string字符串
        //读到这里
        String oldJson="";
        //定义一个byte字节数组
        //逐个字节读出
        byte[] buff = new byte[1024];
        //判断出当前请求出的数据是否走到了最后
        while(buffer.read(buff)!=-1){
            //string字符串转换
            oldJson+=new String(buff);
        }
        //关闭buffer
        buffer.close();
        oldJson.trim();
        LogUtils.e("Signinterceptor-oldJson",oldJson);
        //每个接口中的参数不同，所以在你拿到的字符串中key值不能确定
        //单独取出key中的value值
        String values="";
        String json="";

        try {
            //JSONObject 就是json 是一个重要的数据传输对象 用作异步请求返回对象使用
            //传入原始的json串
            JSONObject job = new JSONObject(oldJson);
            //获取json中全部key值
            //返回的是一个迭代器《String》
            Iterator<String> it = job.keys();
            //是否向下
            //在循环中进行值的拼接
            while(it.hasNext()){
                values+=job.getString(it.next());
            }
            LogUtils.e(values);
            //调用工具类进行排序加密
            String sign= Md5Utils.creatingSign(values);
            //往jsonobject中添加sign值
            sign.trim();
            job.put("sign",sign);
            //赋值 对原有参数 赋值 排序 加密 拼接赋值 并转成字符
            json=job.toString();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        LogUtils.e("Signinterceptor-json",json);
        //放入到requestbody中进行请求
        //类型为application/json
        RequestBody body = RequestBody.create(MediaType.parse("application/json"), json);
        //添加到post请求方式
        builder.post(body);
        //继续一个任务
        return chain.proceed(builder.build());
    }
}
